#pragma once
#include<iostream>
using namespace std;

class Task
{
public:
    Task()
    {}
    Task(int x,int y,char op)
    :_x(x)
    ,_y(y)
    ,_result(0)
    ,_op(op)
    ,_exitcode(0)
    {}
    ~Task()
    {}
    // void taskProducerPrintf()
    // {
    //     printf("我是生产者，我生产了这个 %d %c %d = ? \n",_x,_op,_y);

    // }
    // void taskCustomerPrintf()
    // {
    //     printf("我是消费者，我拿到了这个 %d %c %d = %d (%d)\n",_x,_op,_y,_result,_exitcode);
    // }
     std::string formatArg()
    {
        return std::to_string(_x) + _op + std::to_string(_y) + "=";
    }
    std::string formatRes()
    {
        return std::to_string(_result) + "(" + std::to_string(_exitcode) + ")";
    }
    void operator()()
    {
        switch(_op)
        {
            case '+':
                _result=_x+_y;
                break;
            case '-':
                _result=_x - _y;
                break;
            case '*':
                _result=_x * _y;
                break;
            case '/':
            {
                if (_y == 0)
                {
                    _exitcode = -1;
                }
                else
                {
                    _result = _x / _y;
                }
                break;
            }
            case '%':
            {
                if (_y == 0)
                {
                    _exitcode = -2;
                }
                else
                {
                    _result = _x % _y;
                }
                break;
            }
            default:
                break;
        }

    }

private:
    int _x;
    int _y;
    int _result;
    char _op;//操作符
    int _exitcode;//退出码
};